import toJson from'../data/toJson.js';
import runtimeType from '../sys/runtimeType.js';

/**
 * 应用临时缓存数据存取【同步方法】
 * @description 应用临时缓存数据存取，只在应用本次打开有效
 * @param {String} type = [get|set|clear] 处理方式，值域解释：get-获取、set-设置、clear-清除全部
 * @param {String,Object} data 要处理的数据，要求为可转json格式
 * @return {Boolean,Object} 操作成功与否/读取到的缓存数据
 */
function varShortTime(type = 'get', data = {}) {
	
	// 初始化返回数据为false
	var data_return = false;
    
    // 临时变量名
    var str_name = '$focus_storage_varShortTime';
    
    // 获取当前运行环境
    var runType = runtimeType();
    // 如果是“非UNI”环境
    if (runType == 'nonUNI')
    {
        // 清除全部缓存
        if (type == 'clear')
        {
            try {
                // 清除本特例缓存
                sessionStorage.removeItem(str_name);
                // 标识为"处理成功"
                data_return = true;
            }
            // 标识为"处理失败"
            catch (e) { data_return = false; }
        }
        // 设置缓存
        else if (type == 'set')
        {
            // 转换data参数数据格式为json
            var obj_dataCan = toJson(data);
            // 如果转换成功
            if (obj_dataCan)
            {
                // 将代码放入try，避免报错
                try {
                    // 读取设备上的永久缓存
                    var data_storage = sessionStorage.getItem(str_name);
                    // 如果数据存在，那么转换为json
                    if (data_storage) { data_storage = toJson(data_storage); }
                    // 如果数据不存在，就初始化
                    else { data_storage = {}; }
                    // 合并"已经保存的数据"和"准备保存的数据"
                    var obj_together = Object.assign({}, data_storage, obj_dataCan);
                    // 特例缓存 保存api
                    sessionStorage.setItem(str_name, JSON.stringify(obj_together));
                    // 标识为"处理成功"
                    data_return = true;
                }
                // 标识为"处理失败"
                catch (e) { data_return = false; }
            }
            // 否则标记为"处理失败"
            else { data_return = false; }
        }
        // 其它默认为读取缓存
        else {
            // 将代码放入try，避免报错
            try {
                // 读取设备上的永久缓存
                var data_storage = sessionStorage.getItem(str_name);
                // 数据存在，赋值到结果数据
                if (data_storage) { data_return = toJson(data_storage); }
                // 如果不存在，标识为"处理失败"
                else { data_return = false; }
            }
            // 标识为"处理失败"
            catch (e) { data_return = false; }
        }
    }
    // 如果是UNI环境
    else {
        // APP对象实体
        var myapp = getApp();
        // 清除全部缓存
        if (type == 'clear')
        {
        	// 将数据设置成 null
        	myapp.globalData[str_name] = null;
        	// 标识为"处理成功"
        	data_return = true;
        }
        // 设置缓存
        else if (type == 'set')
        {
        	// 转换data参数数据格式为json
        	var obj_dataCan = toJson(data);
        	// 如果转换成功
        	if (obj_dataCan)
        	{
        		// 初始化 app实例全局变量
        		if (!myapp.globalData[str_name]) { myapp.globalData[str_name] = {}; }
        		// 循环转换后的data数据
        		for (let k in obj_dataCan)
        		{
        			// app实例全局变量对应项 覆盖赋值
        			myapp.globalData[str_name][k] = obj_dataCan[k];
        		}
        		// 标识为"处理成功"
        		data_return = true;
        	}
        	// 否则标记为"处理失败"
        	else { data_return = false; }
        }
        // 其它默认为读取缓存
        else {
        	// 获取app实例全局变量
        	var obj_appGlobal = myapp.globalData[str_name];
        	// 如果有数据，让结果数据等于实例全局变量
        	if (obj_appGlobal) { data_return = obj_appGlobal; }
        	// 否则标记为"处理失败"
        	else { data_return = false; }
        }
    }
	
	// 返回结果数据
	return data_return;
}

export default varShortTime;